/*
 * @Author: your name
 * @Date: 2020-09-22 17:23:28
 * @LastEditTime: 2021-09-28 15:36:30
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \longh_admin\src\permission.js
 */
import router from './router'
import store from './store'
import storage from 'store'
import NProgress from 'nprogress' // progress bar
import '@/components/NProgress/nprogress.less' // progress bar custom style
import notification from 'ant-design-vue/es/notification'
import { setDocumentTitle, domTitle } from '@/utils/domUtil'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { i18nRender } from '@/locales'
import { asyncRouterMap, constantRouterMap } from '@/config/router.config'
NProgress.configure({ showSpinner: false }) // NProgress Configuration

const allowList = ['login', 'register', 'registerResult'] // no redirect allowList
const loginRoutePath = '/newhome'
const defaultRoutePath = '/newhome'
let _count = 0
let _requestCount = 0

function GetQueryString(name) {
  const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  let url = window.location.search;
  const result = url.substring(1).match(reg)
  return result ? decodeURIComponent(result[2]) : null
}


function GetGolborredirectUrl() {
  const FULL_CHARTER =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopgrstuvwxyz";
  let state = "";
  for (let i = 0; i < 6; i++) {
    state += FULL_CHARTER[Math.floor(Math.random() * 52)];
  }

  let GolborredirectUrl =
    GolbUrl.uaaUri +
    "/oauth/authorize?client_id=" +
    GolbUrl._clientId_ +
    "&redirect_uri=" +
    GolbUrl.redirect_uri +
    "&response_type=code&state=" +
    state + '&userType=3';
  console.log(GolborredirectUrl)
  // console.log(GolborredirectUrl)
  return GolborredirectUrl;
}
router.beforeEach((to, from, next) => {
  NProgress.start() // start progress bar
  to.meta && (typeof to.meta.title !== 'undefined' && setDocumentTitle(`${i18nRender(to.meta.title)} - ${domTitle}`))
  /* has token */
  let _token = storage.get(ACCESS_TOKEN)
  next()
  // if (_token) {
  //   if (to.path === loginRoutePath) {
  //     next({ path: defaultRoutePath })
  //     next()
  //     NProgress.done()
  //   } else {
  //     // check login user.roles is null
  //     if (_requestCount == 0) {
  //       _requestCount += 1
  //       if (store.getters.addRouters.length === 0) {
  //         const redirect = decodeURIComponent(from.query.redirect || to.path)
  //         store
  //           .dispatch('GetInfo')
  //           .then(res => {
  //             // 注释异步
  //             console.log("异步路由")
  //             console.log(res.data)
  //             console.log("本地路由")
  //             console.log(store.getters)
  //             const roles = res.data.functionModuleDTOS
  //             // generate dynamic router
  //             console.log(store.getters.addRouters)
  //             store.dispatch('GenerateRoutes', { roles }).then((res) => {
  //               // 根据roles权限生成可访问的路由表
  //               // 动态添加可访问路由表
  //               // console.log('本地的异步')
  //               // console.log(asyncRouterMap)
  //               // console.log('动态获取的路由表')
  //               // console.log('res')
  //               // console.log(res)
  //               router.addRoutes(asyncRouterMap)
  //               // 请求带有 redirect 重定向时，登录自动重定向到该地址
  //               const redirect = decodeURIComponent(from.query.redirect || to.path)
  //               if (to.path === redirect) {
  //                 next({ ...to, replace: true })
  //               } else {
  //                 // 跳转到目的路由
  //                 next({ path: redirect })
  //               }
  //             })

  //             // 这里是本地获取

  //           })
  //           .catch(() => {
  //             // notification.error({
  //             //   message: '错误',
  //             //   description: '请求用户信息失败，请重试'
  //             // })
  //             // 失败时，获取用户信息失败时，调用登出，来清空历史保留信息
  //             // store.dispatch('Logout').then(() => {
  //             //   next({ path: loginRoutePath, query: { redirect: to.fullPath } })
  //             // })
  //           })
  //       } else {
  //         next()
  //       }
  //     } else {
  //       next()
  //     }

  //   }
  // } else {
  //   if (allowList.includes(to.name)) {
  //     // 在免登录名单，直接进入
  //     next()
  //   } else {
  //     if (_count == 0) {
  //       var _long = window.location.href
  //       _count += 1
  //       if (_long.indexOf("code") == -1) {
  //         let _url = GetGolborredirectUrl()
  //         window.location.href = _url
  //         //没有
  //       } else {
  //         let _code = GetQueryString('code')
  //         store.dispatch('getAccessToken', _code).then(res => {
  //             if (res.code == 200) {
  //               // request login userInfo
  //               store
  //                 .dispatch('GetInfo')
  //                 .then(res => {
  //                   // 注释异步
  //                   console.log("异步路由")
  //                   console.log(res.data.functionModuleDTOS)
  //                   console.log("本地路由")
  //                   console.log(store.getters)
  //                   const roles = res.data.functionModuleDTOS
  //                   // generate dynamic router
  //                   console.log(store.getters.addRouters)
  //                   store.dispatch('GenerateRoutes', { roles }).then((res) => {
  //                     // 根据roles权限生成可访问的路由表
  //                     // 动态添加可访问路由表
  //                     // console.log('本地的异步')
  //                     // console.log(asyncRouterMap)
  //                     // console.log('动态获取的路由表')
  //                     // console.log('res')
  //                     // console.log(res)
  //                     router.addRoutes(asyncRouterMap)
  //                     // 请求带有 redirect 重定向时，登录自动重定向到该地址
  //                     const redirect = decodeURIComponent(from.query.redirect || to.path)
  //                     if (to.path === redirect) {
  //                       next({ ...to, replace: true })
  //                     } else {
  //                       // 跳转到目的路由
  //                       next({ path: redirect })
  //                     }
  //                   })

  //                   // 这里是本地获取

  //                 })
  //                 .catch(() => {
  //                   // notification.error({
  //                   //   message: '错误',
  //                   //   description: '请求用户信息失败，请重试'
  //                   // })
  //                   // 失败时，获取用户信息失败时，调用登出，来清空历史保留信息
  //                   // store.dispatch('Logout').then(() => {
  //                   //   next({ path: loginRoutePath, query: { redirect: to.fullPath } })
  //                   // })
  //                 })
  //             }
  //           }).catch(error => {

  //           })

  //       }
  //       next({ path: loginRoutePath, query: { redirect: to.fullPath } })
  //       NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it
  //     } else {
  //       next()
  //       NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it
  //     }

  //   }
  // }
})

router.afterEach(() => {
  NProgress.done() // finish progress bar
})
